package leetcode_字符串._06字符的统计;

/**
 * 找不同
 * 给定两个字符串 s 和 t，它们只包含小写字母。
 * 字符串 t 由字符串 s 随机重排，然后在随机位置添加一个字母。
 * 请找出在 t 中被添加的字母
 * 算法 :
 * 算出两个字符串中字母出现的次数
 * 如果某个字母出现的次数多 1 次 , 则这个字母就是新添加的
 * 改进 :
 * 只需定义一个数组 tem 即可
 * 先遍历 s 字符串 , 用 tem 记录字母出现的次数
 * 再遍历 t 字符串 , 如果该字符串中出现了字母 , 就在 tem 对应的元素 -1
 * 如果 tem 对应的元素 -1 后为负数 , 则说明该字母就是多出来的
 * <p>
 * perfect :
 * 求和 , 将 t 字符串中字符加起来 - 将 s 字符串中字符加起来
 * 位运算
 */
public class _389 {
    public static void main(String[] args) {
        // 异或 相同为 0 , 不同为 1
        System.out.println(0 ^ 1);
    }

    public char findTheDifference(String s, String t) {
        if (s.length() == 0) {
            return t.charAt(0);
        }
        int[] a = new int[26], b = new int[26];
        for (int i = 0; i < s.length(); i++) {
            a[s.charAt(i) - 'a'] += 1;
        }
        for (int i = 0; i < t.length(); i++) {
            b[t.charAt(i) - 'a'] += 1;
        }
        for (int i = 0; i < a.length; i++) {
            if (b[i] - a[i] == 1) {
                return (char) (i + 'a');
            }
        }
        return ' ';
    }

    public char findTheDifference_2(String s, String t) {
        if (s.length() == 0) {
            return t.charAt(0);
        }
        int[] tem = new int[26];
        for (int i = 0; i < s.length(); i++) {
            tem[s.charAt(i) - 'a'] += 1;
        }
        for (int i = 0; i < t.length(); i++) {
            if (--tem[t.charAt(i) - 'a'] < 0) {
                return t.charAt(i);
            }
        }
        return ' ';
    }

    public char findTheDifference_perfect(String s, String t) {
        int res = 0;
        for (int i = 0; i < s.length(); i++) {
            res ^= s.charAt(0);
        }
        for (int i = 0; i < t.length(); i++) {
            res ^= t.charAt(i);
        }
        return (char) res;
    }
}
